package com.cskaoyan.com.base;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Stack;
import java.util.TreeMap;

public class DemoTest {
    public static void main(String[] args) {


        // 数组存储
        Student[] stus = new Student[10];
        stus[0] = new Student("zs", 18);
        stus[1] = new Student("ls", 19);
        // ...

        //

        // ....


        // 怎么看待一个集合类?
        //  1, 使用:  是个存储数据的容器
        //  2, 底层/物理: (这个容器的实现内部机制)真正用来做存储的是: 数组+链表
        //  3, 逻辑: (每一个集合类, 应该有表示的特定的数据结构含义) 数据结构

        // 集合类存储
        ArrayList list = new ArrayList();
        list.add(new Student("zs", 18));
        list.add(new Student("ls", 19));
        // list.remove()


        // 集合类
        Stack stack = new Stack();

        // 集合类
        ArrayDeque arrayDeque = new ArrayDeque();

        // 集合类
        TreeMap treeMap = new TreeMap();



        MyArrayList myArrayList = new MyArrayList();
        myArrayList.add(new Student("zs", 18));
        myArrayList.add(new Student("ls", 19));
        myArrayList.add(new Student("wu", 20));
        // ... 20  ...30

    }
}
// 逻辑结构:(数据结构)  集合, 线性表, 树, 图
// 物理结构:(怎么把数据结构这种逻辑上存在的东西, 落实到内存表现上)

// 伪代码
class MyArrayList{

    Object[] objs ; // 底层真正用来存储数据的数组
    int size; // 数组/MyArrayList存储了多少数据

    public MyArrayList(){
        objs = new Object[10];
    }

    public void add(Object obj){
        // TODO: 代表存储逻辑
        if (size == objs.length ){
            // 意味着: 数组存储满了 , 扩容
            // TODO: 扩容
        }
        objs[size] =  obj;
        size++;
    }

    //
}

class Student{
    String name;
    int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}